package com.liulei.service.impl;

import cn.hutool.crypto.digest.DigestUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.liulei.entities.Account;
import com.liulei.mapper.AccountMapper;
import com.liulei.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * TODO：登录业务逻辑实现类
 * 被@Service注解修饰的类是业务逻辑实现类
 */

@Service
public class AccountServiceImpl implements AccountService {

    /**
     * service依赖mapper，程序运行期SpringBoot容器自动帮我们
     * 按照类型装配(将AccountMapper对象自动装配到AccountServiceImpl里面)
     */
    @Autowired
    private AccountMapper accountMapper;

    /**
     * 处理用户登录的业务逻辑
     * 步骤：
     * 1 根据用户名查询对应的账户
     * 2 判断账户对象(Account)是否为空
     * 3 如果为空登录失败(数据库没有这个用户)，返回false
     * 4 如果非空，对表单输入的密码进行MD5加密
     * 5 判断加密之后的密码和数据库的密码是否相等
     * 6 如果相等登录成功，返回true
     * 7 如果不相等登录失败，返回false
     *
     * @param userName 浏览器表单输入的用户名
     * @param userPwd  浏览器表单输入的密码
     * @return 登录成功返回true，否则返回false
     */

    @Override
    public boolean login(String userName,String userPwd) {
        //封装查询条件
        QueryWrapper<Account> qw = new QueryWrapper<>();
        qw.eq("user_name", userName);
        //根据用户名查询对应的账户
        Account account = accountMapper.selectOne(qw);
        //条件成立：表示没有对应的账户，登录失败，返回false
        if (null == account) {
            return false;
        }
        //对表单输入的密码进行加密
        //encodingPwd 存储加密之后的密码
        String encodingPwd = DigestUtil.md5Hex(userPwd);
        //将加密之后的密码和数据库密码继续宁比较，条件成立：登录成功，返回true。否则登录失败，返回false
        if (Objects.equals(encodingPwd, account.getUserPwd())) {
            return true;
        } else {
            return false;
        }
    }
}
